using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;
using System.Text;

namespace MakeIT.SGI.ERP.Apresentacao
{
    public partial class CadastroTitpag : System.Web.UI.Page
    {

        UsuarioVO usuarioVO = null;
        protected SgiDAOT SgiDAOT = null;
        protected Decimal saldoPagParcelamento = 0;
        protected string docOri = String.Empty;
        protected int idPagParcelamentoParcelaIdTitpag = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            this.SgiDAOT = new SgiDAOT();
            usuarioVO = (UsuarioVO)this.Session["userActive"];

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
                Util.HabilitarCampos(false, this.pnlPagamento);
                atualizarDdlIdFilial(null, null);
                filtraFilialDDL(null, null);

                Session["parcelamentoPagamento"] = null;

                carregaSituacao();
                carregaParcelamento(null);
                carregaParcelas(null);
            }

        }

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

        protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.grvResultado.PageIndex = e.NewPageIndex;
            btnPesquisa_Click(null, null);
        }
        protected void atualizarDdlIdFilial(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlCadIdFilial);

            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlIdFilial);

            CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlPagFilial);
        }

        protected void atualizarDdlIdBanco(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaBanco(this.SgiDAOT, this.ddlCadIdBanco, Convert.ToInt32(ddlCadIdFilial.SelectedValue));

            CarregaDDL.carregaBanco(this.SgiDAOT, this.ddlIdBanco, Convert.ToInt32(ddlIdFilial.SelectedValue));

            CarregaDDL.carregaBanco(this.SgiDAOT, ddlPagBanco, Convert.ToInt32(ddlPagFilial.SelectedValue));
        }

        protected void atualizarDdlIdCtaCor(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaContaCorrente(this.SgiDAOT, this.ddlCadIdCtaCor, Convert.ToInt32(ddlCadIdFilial.SelectedValue), Convert.ToInt32(ddlCadIdBanco.SelectedValue));

            CarregaDDL.carregaContaCorrente(this.SgiDAOT, this.ddlIdCtaCor, Convert.ToInt32(ddlIdFilial.SelectedValue), Convert.ToInt32(ddlIdBanco.SelectedValue));

            CarregaDDL.carregaContaCorrente(this.SgiDAOT, this.ddlPagContaCorrente, Convert.ToInt32(ddlPagFilial.SelectedValue), Convert.ToInt32(ddlPagBanco.SelectedValue));
        }

        protected void atualizarDdlIdCaixa(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaCaixa(this.SgiDAOT, this.ddlCadIdCaixa, Convert.ToInt32(ddlCadIdFilial.SelectedValue));

            CarregaDDL.carregaCaixa(this.SgiDAOT, this.ddlIdCaixa, Convert.ToInt32(ddlIdFilial.SelectedValue));

            CarregaDDL.carregaCaixa(this.SgiDAOT, this.ddlPagCaixa, Convert.ToInt32(ddlPagFilial.SelectedValue));

        }

        protected void atualizarDdlIdFornecedor(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaFornecedor(this.SgiDAOT, this.ddlCadIdFornecedor, txtCadPesquisarFornecedor.Text, Convert.ToInt32(this.ddlCadIdFilial.SelectedValue));

            CarregaDDL.carregaFornecedor(this.SgiDAOT, this.ddlIdFornecedor, Convert.ToInt32(this.ddlIdFilial.SelectedValue));
        }

        protected void atualizarDdlIdFormaPgto(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaFormaPagamento(this.SgiDAOT, this.ddlCadIdFormaPgto, Convert.ToInt32(ddlCadIdFilial.SelectedValue));

            CarregaDDL.carregaFormaPagamento(this.SgiDAOT, this.ddlIdFormaPgto, Convert.ToInt32(ddlIdFilial.SelectedValue));

            CarregaDDL.carregaFormaPagamento(this.SgiDAOT, this.ddlPagFormaPagamento, Convert.ToInt32(ddlPagFilial.SelectedValue));

        }

        protected void atualizarDdlIdPlnCta(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaPlanoConta(this.SgiDAOT, this.ddlCadIdPlnCta, Convert.ToInt32(ddlCadIdFilial.SelectedValue));

            CarregaDDL.carregaPlanoConta(this.SgiDAOT, this.ddlIdPlnCta, Convert.ToInt32(ddlIdFilial.SelectedValue));
        }

        protected void atualizarDdlIdCCusto(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaCentroCusto(this.SgiDAOT, this.ddlCadIdCCusto, Convert.ToInt32(ddlCadIdFilial.SelectedValue));

            CarregaDDL.carregaCentroCusto(this.SgiDAOT, this.ddlIdCCusto, Convert.ToInt32(ddlIdFilial.SelectedValue));
        }

        protected void carregaSituacao()
        {
            CarregaDDL.carregaTituloPagarSituacao(ddlCadSituacao, "TITULOPAGAR", false);
            CarregaDDL.carregaTituloPagarSituacao(ddlSituacao, "TITULOPAGAR", true);
        }

        protected void carregaParcelamento(List<TitpagVO> tpVOLista)
        {
            gvPagParcelamento.DataSource = tpVOLista;
            gvPagParcelamento.DataBind();

            this.txtPagParcelaQtd.Text = "1";
            this.txtPagParcelaVencimento.Text = DateTime.Now.ToShortDateString();

            if (gvPagParcelamento.Rows.Count <= 0)
            {
                Session["parcelamentoPagamento"] = null;
                this.txtPagParcelaDocOri.Text = String.Empty;
                this.txtPagParcelaIdFornecedor.Text = String.Empty;
                this.hfPagParcelaIdFornecedor.Value = String.Empty;
                this.txtPagParcelaIdFilial.Text = String.Empty;
                this.hfPagParcelaIdFilial.Value = String.Empty;
                this.txtPagParcelaSaldo.Text = "0,00";
            }
            else
            {
                HiddenField hfPagParcelamentoIdFornecedor = (HiddenField)gvPagParcelamento.Rows[0].FindControl("hfPagParcelamentoIdFornecedor");
                HiddenField hfPagParcelamentoIdFilial = (HiddenField)gvPagParcelamento.Rows[0].FindControl("hfPagParcelamentoIdFilial");

                int idFornecedor = hfPagParcelamentoIdFornecedor.Value != null && !String.IsNullOrEmpty(hfPagParcelamentoIdFornecedor.Value) ? Convert.ToInt32(hfPagParcelamentoIdFornecedor.Value) : 0;
                if (idFornecedor != 0)
                {
                    hfPagParcelaIdFornecedor.Value = hfPagParcelamentoIdFornecedor.Value;
                    txtPagParcelaIdFornecedor.Text = this.SgiDAOT.getFornecedor(idFornecedor).pessoa;
                }

                int idFilial = Convert.ToInt32(hfPagParcelamentoIdFilial.Value);
                hfPagParcelaIdFilial.Value = hfPagParcelamentoIdFilial.Value;
                txtPagParcelaIdFilial.Text = this.SgiDAOT.getFilial(idFilial).filial;
            }
        }

        protected void carregaParcelas(List<TitpagVO> tpVOLista)
        {
            gvPagParcelamentoResultado.DataSource = tpVOLista;
            gvPagParcelamentoResultado.DataBind();
        }

        /// <summary>
        /// Manipula o evento do botão btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            TitpagVO titpagVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadIdTitPag.Text))
                {
                    titpagVO = TitpagVO.CreateVO();
                    titpagVO.cadastro = DateTime.Now;
                    titpagVO.cadastradoPor = usuarioVO.user;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    titpagVO = this.SgiDAOT.getTitpag(Int32.Parse(this.txtCadIdTitPag.Text));
                }

                titpagVO.idFilial = Int32.Parse(this.ddlCadIdFilial.SelectedValue);
                if (this.ddlCadIdCtaCor.SelectedValue.Equals("-1"))
                    titpagVO.idCtaCor = null;
                else
                    titpagVO.idCtaCor = Int32.Parse(this.ddlCadIdCtaCor.SelectedValue);
                if (this.ddlCadIdCaixa.SelectedValue.Equals("-1"))
                    titpagVO.idCaixa = null;
                else
                    titpagVO.idCaixa = Int32.Parse(this.ddlCadIdCaixa.SelectedValue);
                if (this.ddlCadIdFornecedor.SelectedValue.Equals("-1"))
                    titpagVO.idFornecedor = null;
                else
                    titpagVO.idFornecedor = Int32.Parse(this.ddlCadIdFornecedor.SelectedValue);
                if (this.ddlCadIdFormaPgto.SelectedValue.Equals("-1"))
                    titpagVO.idFormaPgto = null;
                else
                    titpagVO.idFormaPgto = Int32.Parse(this.ddlCadIdFormaPgto.SelectedValue);
                if (this.ddlCadIdPlnCta.SelectedValue.Equals("-1"))
                    titpagVO.idPlnCta = null;
                else
                    titpagVO.idPlnCta = Int32.Parse(this.ddlCadIdPlnCta.SelectedValue);
                if (this.ddlCadIdCCusto.SelectedValue.Equals("-1"))
                    titpagVO.idCCusto = null;
                else
                    titpagVO.idCCusto = Int32.Parse(this.ddlCadIdCCusto.SelectedValue);
                if (string.IsNullOrEmpty(this.txtCadNrDoc.Text))
                    titpagVO.nrDoc = null;
                else
                    titpagVO.nrDoc = this.txtCadNrDoc.Text;
                if (string.IsNullOrEmpty(this.txtCadObs.Text))
                    titpagVO.obs = null;
                else
                    titpagVO.obs = this.txtCadObs.Text;
                titpagVO.vcto = DateTime.Parse(this.txtCadVcto.Text);

                if (string.IsNullOrEmpty(this.txtCadPgto.Text))
                    titpagVO.pgto = null;
                else
                    titpagVO.pgto = DateTime.Parse(this.txtCadPgto.Text);

                titpagVO.situacao = Convert.ToChar(this.ddlCadSituacao.SelectedValue);

                titpagVO.valor = decimal.Parse(this.txtCadValor.Text.Replace(".", ""));
                titpagVO.valorJuroC = decimal.Parse(this.txtCadValorJuroC.Text.Replace(".", ""));
                titpagVO.valorDescC = decimal.Parse(this.txtCadValorDescC.Text.Replace(".", ""));
                titpagVO.valorPago = decimal.Parse(this.txtCadValorPago.Text.Replace(".", ""));

                decimal resultado = (decimal)((titpagVO.valor + titpagVO.valorJuroC) - (titpagVO.valorPago + titpagVO.valorDescC));

                if (resultado >= 0)
                {
                    if (titpagVO.situacao != 'F')
                    {
                        titpagVO.valorSaldo = resultado;
                        txtCadValorSaldo.Text = Convert.ToString(titpagVO.valorSaldo);
                    }
                    else
                    {
                        titpagVO.valorDescC += resultado;
                        titpagVO.valorSaldo = 0;
                        txtCadValorDescC.Text = Convert.ToString(titpagVO.valorDescC);
                        txtCadValorSaldo.Text = "0,00";

                        titpagVO.pgto = DateTime.Now;
                        this.txtCadPgto.Text = titpagVO.pgto.Value.ToString("dd/MM/yyyy");
                    }
                }
                else
                {
                    Util.ExibeAlert(this, "O valor do saldo não pode ser menor que zero! Altere o valor do título!");
                    return;
                }

                if (string.IsNullOrEmpty(this.txtCadNrDocOri.Text))
                    titpagVO.nrDocOri = null;
                else
                    titpagVO.nrDocOri = this.txtCadNrDocOri.Text;
                titpagVO.edicao = DateTime.Now;
                titpagVO.editadoPor = usuarioVO.user;

                this.SgiDAOT.transactionBegin();

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                {
                    titpagVO.idTitPag = (int)this.SgiDAOT.newTitpag(titpagVO);
                    this.SgiDAOT.newTitpaghist(logTitpag(null, titpagVO));
                }
                else
                {
                    TitpaghistVO thVO = logTitpag(this.SgiDAOT.getTitpag(titpagVO.idTitPag), titpagVO);
                    if (thVO != null)
                        this.SgiDAOT.newTitpaghist(thVO);
                    this.SgiDAOT.setTitpag(titpagVO);
                }

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtCadIdTitPag.Text = titpagVO.idTitPag.ToString();
                this.ltCadastradoPor.Text = titpagVO.cadastradoPor;
                this.ltEditadoPor.Text = titpagVO.editadoPor;
                this.ltDataCadastro.Text = titpagVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = titpagVO.edicao.ToString("dd/MM/yyyy");

                carregaTitpaghist(titpagVO.idTitPag);
                carregaPagamento(titpagVO.idTitPag);
                verificaPagParcelamentoAlteracao(titpagVO.idTitPag, titpagVO.situacao, (Decimal)titpagVO.valorSaldo, titpagVO.idFornecedor);
                atualizaGvParcelamento(titpagVO.idTitPag, (Decimal)titpagVO.valorSaldo);
                idPagParcelamentoParcelaIdTitpag = titpagVO.idTitPag;
                carregaParcelas((List<TitpagVO>)Session["parcelamentoPagamentoParcela"]);

                this.SgiDAOT.transactionCommit();
            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idTitPag = null;
            int? idFilial = null;
            int? idCtaCor = null;
            int? idCaixa = null;
            int? idFornecedor = null;
            int? idFormaPgto = null;
            int? idPlnCta = null;
            int? idCCusto = null;
            string nrDoc = null;
            char? situacao = null;
            string nrDocOri = null;
            int? idBanco = null;
            DateTime? vctoDe = null;
            DateTime? vctoAte = null;
            DateTime? pgtoDe = null;
            DateTime? pgtoAte = null;
            decimal? valorDe = null;
            decimal? valorAte = null;

            try
            {

                if (!string.IsNullOrEmpty(this.txtIdTitPag.Text))
                {
                    idTitPag = Int32.Parse(this.txtIdTitPag.Text);
                }

                if (!this.ddlIdFilial.SelectedValue.Equals("-1"))
                {
                    idFilial = Int32.Parse(this.ddlIdFilial.SelectedValue);
                }

                if (!this.ddlIdCtaCor.SelectedValue.Equals("-1"))
                {
                    idCtaCor = Int32.Parse(this.ddlIdCtaCor.SelectedValue);
                }

                if (!this.ddlIdCaixa.SelectedValue.Equals("-1"))
                {
                    idCaixa = Int32.Parse(this.ddlIdCaixa.SelectedValue);
                }

                if (!this.ddlIdFornecedor.SelectedValue.Equals("-1"))
                {
                    idFornecedor = Int32.Parse(this.ddlIdFornecedor.SelectedValue);
                }

                if (!this.ddlIdFormaPgto.SelectedValue.Equals("-1"))
                {
                    idFormaPgto = Int32.Parse(this.ddlIdFormaPgto.SelectedValue);
                }

                if (!this.ddlIdPlnCta.SelectedValue.Equals("-1"))
                {
                    idPlnCta = Int32.Parse(this.ddlIdPlnCta.SelectedValue);
                }

                if (!this.ddlIdCCusto.SelectedValue.Equals("-1"))
                {
                    idCCusto = Int32.Parse(this.ddlIdCCusto.SelectedValue);
                }

                if (!string.IsNullOrEmpty(this.txtNrDoc.Text))
                {
                    nrDoc = this.txtNrDoc.Text;
                }

                if (!this.ddlSituacao.SelectedValue.Equals("0"))
                {
                    situacao = Convert.ToChar(this.ddlSituacao.SelectedValue);
                }

                if (!string.IsNullOrEmpty(this.txtNrDocOri.Text))
                {
                    nrDocOri = this.txtNrDocOri.Text;
                }

                if (!this.ddlIdBanco.SelectedValue.Equals("-1"))
                {
                    idBanco = Int32.Parse(this.ddlIdBanco.SelectedValue);
                }

                //-------------- data vencimento ----------------------

                if (!string.IsNullOrEmpty(this.txtVctoDe.Text))
                {
                    vctoDe = DateTime.Parse(this.txtVctoDe.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtVctoAte.Text))
                {
                    vctoDe = vctoAte;
                }

                if (!string.IsNullOrEmpty(this.txtVctoAte.Text))
                {
                    vctoAte = DateTime.Parse(this.txtVctoAte.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtVctoDe.Text))
                {
                    vctoAte = vctoDe;
                }

                //-------------- data pagamento ----------------------

                if (!string.IsNullOrEmpty(this.txtPgtoDe.Text))
                {
                    pgtoDe = DateTime.Parse(this.txtPgtoDe.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtPgtoAte.Text))
                {
                    pgtoDe = pgtoAte;
                }

                if (!string.IsNullOrEmpty(this.txtPgtoAte.Text))
                {
                    pgtoAte = DateTime.Parse(this.txtPgtoAte.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtPgtoDe.Text))
                {
                    pgtoAte = pgtoDe;
                }

                //-------------- valor ----------------------

                if (!string.IsNullOrEmpty(this.txtValorDe.Text))
                {
                    valorDe = Decimal.Parse(this.txtValorDe.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtValorAte.Text))
                {
                    valorDe = valorAte;
                }

                if (!string.IsNullOrEmpty(this.txtValorAte.Text))
                {
                    valorAte = Decimal.Parse(this.txtValorAte.Text);
                }
                else if (!string.IsNullOrEmpty(this.txtValorDe.Text))
                {
                    valorAte = valorDe;
                }



                //Recupera a lista de registros segundo a pesquisa
                this.grvResultado.DataSource = this.SgiDAOT.getTitpags(idTitPag, nrDoc, idFilial, idCtaCor, idCaixa, idFornecedor, idFormaPgto, idPlnCta, idCCusto, situacao, nrDocOri, idBanco, vctoDe, vctoAte, pgtoDe, pgtoAte, valorDe, valorAte);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabTitpag.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelCad);

            btnPesquisarFornecedor.Enabled = false;

            // Destrava botão de edição
            this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdTitPag.Text));

            // Destrava botão de exclusao
            this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdTitPag.Text));

            // Detrava botão de novo
            this.btnNovo.Enabled = true;

            // Desabilita o botão salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            TitpagVO titpagVO = null;
            int idTitPag = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idTitPag = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                titpagVO = this.SgiDAOT.getTitpag(idTitPag);

                this.txtCadIdTitPag.Text = titpagVO.idTitPag.ToString();
                this.ddlCadIdFilial.SelectedValue = titpagVO.idFilial.ToString();
                if (titpagVO.idCtaCor == null)
                {
                    this.ddlCadIdBanco.SelectedValue = "-1";
                    atualizarDdlIdCtaCor(null, null);
                    this.ddlCadIdCtaCor.SelectedValue = "-1";
                }
                else
                {
                    this.ddlCadIdBanco.SelectedValue = Convert.ToString(this.SgiDAOT.getCtacor(titpagVO.idCtaCor).idBanco);
                    atualizarDdlIdCtaCor(null, null);
                    this.ddlCadIdCtaCor.SelectedValue = titpagVO.idCtaCor.Value.ToString();
                }
                if (titpagVO.idCaixa == null)
                    this.ddlCadIdCaixa.SelectedValue = "-1";
                else
                    this.ddlCadIdCaixa.SelectedValue = titpagVO.idCaixa.Value.ToString();
                if (titpagVO.idFornecedor == null)
                {
                    this.txtCadPesquisarFornecedor.Text = String.Empty;
                    atualizarDdlIdFornecedor(null, null);
                    this.ddlCadIdFornecedor.SelectedValue = "-1";
                }
                else
                {
                    this.txtCadPesquisarFornecedor.Text = this.SgiDAOT.getFornecedor(titpagVO.idFornecedor).pessoa;
                    atualizarDdlIdFornecedor(null, null);
                    this.ddlCadIdFornecedor.SelectedValue = Convert.ToString(titpagVO.idFornecedor);
                }
                if (titpagVO.idFormaPgto == null)
                    this.ddlCadIdFormaPgto.SelectedValue = "-1";
                else
                    this.ddlCadIdFormaPgto.SelectedValue = titpagVO.idFormaPgto.Value.ToString();
                if (titpagVO.idPlnCta == null)
                    this.ddlCadIdPlnCta.SelectedValue = "-1";
                else
                    this.ddlCadIdPlnCta.SelectedValue = titpagVO.idPlnCta.Value.ToString();
                if (titpagVO.idCCusto == null)
                    this.ddlCadIdCCusto.SelectedValue = "-1";
                else
                    this.ddlCadIdCCusto.SelectedValue = titpagVO.idCCusto.Value.ToString();
                this.txtCadNrDoc.Text = titpagVO.nrDoc;
                this.txtCadObs.Text = titpagVO.obs;
                this.txtCadVcto.Text = titpagVO.vcto.ToString("dd/MM/yyyy");
                if (titpagVO.pgto == null)
                    this.txtCadPgto.Text = null;
                else
                    this.txtCadPgto.Text = titpagVO.pgto.Value.ToString("dd/MM/yyyy");
                this.txtCadValor.Text = String.Format("{0:n2}", titpagVO.valor);
                if (titpagVO.valorJuroC == null)
                    this.txtCadValorJuroC.Text = null;
                else
                    this.txtCadValorJuroC.Text = String.Format("{0:n2}", titpagVO.valorJuroC.Value);
                if (titpagVO.valorDescC == null)
                    this.txtCadValorDescC.Text = null;
                else
                    this.txtCadValorDescC.Text = String.Format("{0:n2}", titpagVO.valorDescC.Value);
                if (titpagVO.valorPago == null)
                    this.txtCadValorPago.Text = null;
                else
                    this.txtCadValorPago.Text = String.Format("{0:n2}", titpagVO.valorPago.Value);
                if (titpagVO.valorSaldo == null)
                    this.txtCadValorSaldo.Text = null;
                else
                    this.txtCadValorSaldo.Text = String.Format("{0:n2}", titpagVO.valorSaldo.Value);
                this.ddlCadSituacao.SelectedValue = titpagVO.situacao.ToString();
                this.txtCadNrDocOri.Text = titpagVO.nrDocOri;
                this.ltCadastradoPor.Text = titpagVO.cadastradoPor;
                this.ltEditadoPor.Text = titpagVO.editadoPor;
                this.ltDataCadastro.Text = titpagVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = titpagVO.edicao.ToString("dd/MM/yyyy");

                //Habilita tab page do cadastro
                this.tabTitpag.ActiveTabIndex = 1;

                //Desabilita campos para edição
                Util.HabilitarCampos(false, this.panelCad);

                btnPesquisarFornecedor.Enabled = false;

                //Desabilita botão salvar
                this.btnSalvar.Enabled = false;

                //Habilita botão editar
                this.btnEditar.Enabled = true;

                //Habilita botão excluir
                this.btnExcluir.Enabled = true;

                //Habilita botão novo
                this.btnNovo.Enabled = true;


                //habilita botoes pagamento
                this.btnPagNovo.Enabled = true;
                this.btnPagCancelar.Enabled = true;
                this.btnPagSalvar.Enabled = false;

                carregaTitpaghist(titpagVO.idTitPag);
                carregaPagamento(titpagVO.idTitPag);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }


        // <summary>
        // Manipula o evento editar do web form
        // </summary>
        // <param name="sender">Objeto disparador de evento</param>
        // <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            btnPesquisarFornecedor.Enabled = true;

            // Trava apenas os text box da PK
            this.txtCadIdTitPag.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNrDoc.Focus();
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            filtraFilialDDL(null, null);

            this.txtCadValorJuroC.Text = "0,00";
            this.txtCadValorDescC.Text = "0,00";
            this.txtCadValorPago.Text = "0,00";
            this.txtCadValorSaldo.Text = "0,00";

            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Trava apenas os text box da PK
            this.txtCadIdTitPag.Enabled = false;

            btnPesquisarFornecedor.Enabled = true;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNrDoc.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            TitpagVO titpagVO = null;
            TitpaghistVO titpaghistVO = null;

            try
            {
                //Cria objeto
                titpagVO = TitpagVO.CreateVO();
                titpagVO.idTitPag = Int32.Parse(this.txtCadIdTitPag.Text);

                titpaghistVO = TitpaghistVO.CreateVO();
                titpaghistVO.idTitPagHist = -1;
                titpaghistVO.idTitPag = titpagVO.idTitPag;

                this.SgiDAOT.transactionBegin();

                this.SgiDAOT.delTitpaghist(titpaghistVO);
                this.SgiDAOT.delTitpag(titpagVO);

                this.SgiDAOT.transactionCommit();

                verificaPagParcelamentoAlteracao(titpagVO.idTitPag, 'F', 0, -1);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                btnPesquisarFornecedor.Enabled = false;

                // Trava botão de edição
                this.btnEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvar.Enabled = false;

                // Habilita o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }

        }

        protected void filtraFilialDDL(object sender, EventArgs e)
        {
            atualizarDdlIdBanco(null, null);
            atualizarDdlIdCtaCor(null, null);
            atualizarDdlIdCaixa(null, null);
            atualizarDdlIdFornecedor(null, null);
            atualizarDdlIdFormaPgto(null, null);
            atualizarDdlIdPlnCta(null, null);
            atualizarDdlIdCCusto(null, null);
        }

        protected void ddlBanco_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlIdCtaCor(null, null);
        }

        protected void btnPesquisarFornecedor_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtCadPesquisarFornecedor.Text) && !ddlCadIdFilial.SelectedValue.Equals("-1"))
                atualizarDdlIdFornecedor(null, null);
            else
                Util.ExibeAlert(this, "Informe a pessoa e a filial para a pesquisa!");
        }

        protected void grvResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int idTitPag = int.Parse(((HiddenField)e.Row.FindControl("hfIdTitPag")).Value);

                TitpagVO tpVO = (TitpagVO)e.Row.DataItem;

                Label lblSituacao = (Label)e.Row.FindControl("lblSituacao");
                ImageButton imgbParcelamento = (ImageButton)e.Row.FindControl("imgbParcelamento");

                lblSituacao.Text = tpVO.situacao == 'A' ? "Aberto" : tpVO.situacao == 'F' ? "Fechado" : "Cancelado";
                imgbParcelamento.Visible = tpVO.situacao == 'A' && tpVO.valorSaldo > 0 ? true : false;
            }
        }



        #region TitpagXTitpaghist

        protected void carregaTitpaghist(int id)
        {
            //recupera Titpaghist
            Util.LimparCampos(this.panelTitpaghist);
            Util.HabilitarCampos(true, this.panelTitpaghist);
            this.ltCadTitpaghistTitpag.Text = Convert.ToString(id);
            this.ltTitpaghistCadastradoPor.Text = "";
            this.ltTitpaghistDataCadastro.Text = "";
            this.ltTitpaghistDataEdicao.Text = "";
            this.ltTitpaghistEditadoPor.Text = "";
            this.grvCadTitpagxTitpaghist.DataSource = this.SgiDAOT.getTitpaghists(null, null, id);
            this.grvCadTitpagxTitpaghist.DataBind();
        }

        protected void imgbCadTitpaghistVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            TitpaghistVO titpaghistVO = null;
            int idTitPagHist = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idTitPagHist = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                titpaghistVO = this.SgiDAOT.getTitpaghist(idTitPagHist);

                this.txtCadTitpaghistIdTitPagHist.Text = titpaghistVO.idTitPagHist.ToString();
                this.txtCadTitpaghistTitPagHist.Text = titpaghistVO.titPagHist;
                this.txtCadTitpaghistTitPagAcao.Text = titpaghistVO.titPagAcao;
                this.ltTitpaghistCadastradoPor.Text = titpaghistVO.cadastradoPor;
                this.ltTitpaghistEditadoPor.Text = titpaghistVO.editadoPor;
                this.ltTitpaghistDataCadastro.Text = titpaghistVO.cadastro.ToString("dd/MM/yyyy");
                this.ltTitpaghistDataEdicao.Text = titpaghistVO.edicao.ToString("dd/MM/yyyy");

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        protected TitpaghistVO logTitpag(TitpagVO original, TitpagVO alteracao)
        {
            string acao = String.Empty;
            StringBuilder para = new StringBuilder();
            StringBuilder paraCompara = new StringBuilder();
            int idTitpag = alteracao.idTitPag;

            if (original == null)
            {
                acao = "Inclusão";
                para.Append("ID => " + alteracao.idTitPag);
                para.Append(", ID Filial => " + alteracao.idFilial);
                para.Append((alteracao.idCtaCor != (int)-1 && alteracao.idCtaCor != null ? ", ID Conta Corrente => " + alteracao.idCtaCor : ""));
                para.Append((alteracao.idCaixa != (int)-1 && alteracao.idCaixa != null ? ", ID Caixa => " + alteracao.idCaixa : ""));
                para.Append((alteracao.idFornecedor != (int)-1 && alteracao.idFornecedor != null ? ", ID Fornecedor => " + alteracao.idFornecedor : ""));
                para.Append((alteracao.idFormaPgto != (int)-1 && alteracao.idFormaPgto != null ? ", ID Forma de Pagamento => " + alteracao.idFormaPgto : ""));
                para.Append((alteracao.idPlnCta != (int)-1 && alteracao.idPlnCta != null ? ", ID Plano de Conta => " + alteracao.idPlnCta : ""));
                para.Append((alteracao.idCCusto != (int)-1 && alteracao.idCCusto != null ? ", ID Centro de Custo => " + alteracao.idCCusto : ""));

                para.Append((!String.IsNullOrEmpty(alteracao.nrDoc) ? ", Documento => " + alteracao.nrDoc : ""));
                para.Append((!String.IsNullOrEmpty(alteracao.nrDocOri) ? ", Documento Originario => " + alteracao.nrDoc : ""));
                para.Append((!String.IsNullOrEmpty(alteracao.obs) ? ", Obs => " + alteracao.obs : ""));
                para.Append((!String.IsNullOrEmpty(alteracao.vcto.ToString("dd/MM/yyyy")) ? ", Data Vencimento => " + alteracao.vcto.ToString("dd/MM/yyyy") : ""));
                para.Append((alteracao.pgto != null) ? ", Data Pagamento => " + alteracao.pgto.Value.ToString("dd/MM/yyyy") : "");

                para.Append(", Valor Título => " + alteracao.valor);
                para.Append(alteracao.valorJuroC != null ? ", Valor de Acrescimo => " + alteracao.valorJuroC.Value.ToString() : "");
                para.Append(alteracao.valorDescC != null ? ", Valor de desconto => " + alteracao.valorDescC.Value.ToString() : "");
                para.Append(alteracao.valorPago != null ? ", Valor Pago => " + alteracao.valorPago.Value.ToString() : "");
                para.Append(alteracao.valorSaldo != null ? ", Valor Saldo => " + alteracao.valorSaldo.Value.ToString() : "");

                para.Append((alteracao.situacao == 'A' ? ", Situação => Aberto" : alteracao.situacao == 'F' ? ", Situação => Fechado" : ", Situação => Cancelado"));
            }
            else if (original != null && alteracao != null)
            {
                if (!original.Equals(alteracao))
                {
                    acao = "Alteração";
                    para.Append("ID => " + alteracao.idTitPag);
                    paraCompara.Append(para.ToString());
                    if (!original.idFilial.Equals(alteracao.idFilial))
                        para.Append(", ID Filial => " + alteracao.idFilial);
                    if (!original.idCtaCor.Equals(alteracao.idCtaCor))
                        para.Append(", ID Conta Corrente => " + (original.idCtaCor != (int)-1 && original.idCtaCor != null ? Convert.ToString(alteracao.idCtaCor) : "\"Vazio\"") + " para " + (alteracao.idCtaCor != (int)-1 && alteracao.idCtaCor != null ? Convert.ToString(alteracao.idCtaCor) : "\"Vazio\""));
                    if (!original.idCaixa.Equals(alteracao.idCaixa))
                        para.Append(", ID Caixa=> " + (original.idCaixa != (int)-1 && original.idCaixa != null ? Convert.ToString(alteracao.idCaixa) : "\"Vazio\"") + " para " + (alteracao.idCaixa != (int)-1 && alteracao.idCaixa != null ? Convert.ToString(alteracao.idCaixa) : "\"Vazio\""));
                    if (!original.idFornecedor.Equals(alteracao.idFornecedor))
                        para.Append(", ID Fornecedor=> " + (original.idFornecedor != (int)-1 && original.idFornecedor != null ? Convert.ToString(alteracao.idFornecedor) : "\"Vazio\"") + " para " + (alteracao.idFornecedor != (int)-1 && alteracao.idFornecedor != null ? Convert.ToString(alteracao.idFornecedor) : "\"Vazio\""));
                    if (!original.idFormaPgto.Equals(alteracao.idFormaPgto))
                        para.Append(", ID Forma de Pagamento=> " + (original.idFormaPgto != (int)-1 && original.idFormaPgto != null ? Convert.ToString(alteracao.idFormaPgto) : "\"Vazio\"") + " para " + (alteracao.idFormaPgto != (int)-1 && alteracao.idFormaPgto != null ? Convert.ToString(alteracao.idFormaPgto) : "\"Vazio\""));
                    if (!original.idPlnCta.Equals(alteracao.idPlnCta))
                        para.Append(", ID Plano de Conta=> " + (original.idPlnCta != (int)-1 && original.idPlnCta != null ? Convert.ToString(alteracao.idPlnCta) : "\"Vazio\"") + " para " + (alteracao.idPlnCta != (int)-1 && alteracao.idPlnCta != null ? Convert.ToString(alteracao.idPlnCta) : "\"Vazio\""));
                    if (!original.idCCusto.Equals(alteracao.idCCusto))
                        para.Append(", ID Centro de Custo=> " + (original.idCCusto != (int)-1 && original.idCCusto != null ? Convert.ToString(alteracao.idCCusto) : "\"Vazio\"") + " para " + (alteracao.idCCusto != (int)-1 && alteracao.idCCusto != null ? Convert.ToString(alteracao.idCCusto) : "\"Vazio\""));

                    original.nrDoc = (String.IsNullOrEmpty(original.nrDoc) ? "" : original.nrDoc);
                    alteracao.nrDoc = (String.IsNullOrEmpty(alteracao.nrDoc) ? "" : alteracao.nrDoc);
                    if (!original.nrDoc.Equals(alteracao.nrDoc))
                        para.Append(", Documento => " + (!String.IsNullOrEmpty(original.nrDoc) ? original.nrDoc : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.nrDoc) ? alteracao.nrDoc : "\"Vazio\""));

                    original.nrDocOri = (String.IsNullOrEmpty(original.nrDocOri) ? "" : original.nrDocOri);
                    alteracao.nrDocOri = (String.IsNullOrEmpty(alteracao.nrDocOri) ? "" : alteracao.nrDocOri);
                    if (!original.nrDocOri.Equals(alteracao.nrDocOri))
                        para.Append(", Documento Originario => " + (!String.IsNullOrEmpty(original.nrDocOri) ? original.nrDoc : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.nrDocOri) ? alteracao.nrDoc : "\"Vazio\""));

                    original.obs = (String.IsNullOrEmpty(original.obs) ? "" : original.obs);
                    alteracao.obs = (String.IsNullOrEmpty(alteracao.obs) ? "" : alteracao.obs);
                    if (!original.obs.Equals(alteracao.obs))
                        para.Append(", Obs => " + (!String.IsNullOrEmpty(original.obs) ? original.obs : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.obs) ? alteracao.obs : "\"Vazio\""));

                    if (!original.vcto.Equals(alteracao.vcto))
                        para.Append(", Data Vencimento => " + (!String.IsNullOrEmpty(original.vcto.ToString("dd/MM/yyyy")) ? original.vcto.ToString("dd/MM/yyyy") : "\"Vazio\"") + " para " + (!String.IsNullOrEmpty(alteracao.vcto.ToString("dd/MM/yyyy")) ? alteracao.vcto.ToString("dd/MM/yyyy") : "\"Vazio\""));

                    if (!original.pgto.Equals(alteracao.pgto))
                        para.Append(", Data Pagamento => " + ((original.pgto != null) ? original.pgto.Value.ToString("dd/MM/yyyy") : "\"Vazio\"") + " para " + ((alteracao.pgto != null) ? alteracao.pgto.Value.ToString("dd/MM/yyyy") : "\"Vazio\""));

                    if (!original.valor.Equals(alteracao.valor))
                        para.Append(", Valor Título => " + original.valor + " para " + alteracao.valor);
                    if (!original.valorJuroC.Equals(alteracao.valorJuroC))
                        para.Append(", Valor de Acrescimo => " + (original.valorJuroC != null ? original.valorJuroC.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorJuroC != null ? alteracao.valorJuroC.Value.ToString() : "\"Vazio\""));
                    if (!original.valorDescC.Equals(alteracao.valorDescC))
                        para.Append(", Valor de desconto => " + (original.valorDescC != null ? original.valorDescC.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorDescC != null ? alteracao.valorDescC.Value.ToString() : "\"Vazio\""));
                    if (!original.valorPago.Equals(alteracao.valorPago))
                        para.Append(", Valor Pago => " + (original.valorPago != null ? original.valorPago.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorPago != null ? alteracao.valorPago.Value.ToString() : "\"Vazio\""));
                    if (!original.valorSaldo.Equals(alteracao.valorSaldo))
                        para.Append(", Valor Saldo => " + (original.valorSaldo != null ? original.valorSaldo.Value.ToString() : "\"Vazio\"") + " para " + (alteracao.valorSaldo != null ? alteracao.valorSaldo.Value.ToString() : "\"Vazio\""));

                    if (!original.situacao.Equals(alteracao.situacao))
                        para.Append(", Situação => " + (original.situacao == 'A' ? "Aberto" : original.situacao == 'F' ? "Fechado" : "Cancelado") + " para " + (alteracao.situacao == 'A' ? "Aberto" : alteracao.situacao == 'F' ? "Fechado" : "Cancelado"));
                }
            }

            TitpaghistVO thVO = null;

            if (para.Length > paraCompara.Length)
            {
                thVO = TitpaghistVO.CreateVO();

                thVO.titPagAcao = acao;
                thVO.titPagHist = para.ToString();
                thVO.idTitPag = (int)alteracao.idTitPag;

                thVO.cadastradoPor = usuarioVO.user;
                thVO.cadastro = DateTime.Now;
                thVO.editadoPor = usuarioVO.user;
                thVO.edicao = DateTime.Now;
            }
            return thVO;

        }

        #endregion

        #region TitipagXPagamento

        protected void carregaPagamento(int id)
        {
            TitpagVO tpVO = this.SgiDAOT.getTitpag(id);

            //recupera Titpaghist
            Util.LimparCampos(this.pnlPagamento);
            this.ltPagIDTitpag.Text = Convert.ToString(tpVO.idTitPag);
            this.lblPagValor.Text = Convert.ToString(tpVO.valor);
            this.lblPagAcrescimo.Text = Convert.ToString(tpVO.valorJuroC);
            this.lblPagDesconto.Text = Convert.ToString(tpVO.valorDescC);
            this.lblPagPago.Text = Convert.ToString(tpVO.valorPago);
            this.lblPagSaldo.Text = Convert.ToString(tpVO.valorSaldo);
            this.ltPagCadastradoPor.Text = "";
            this.ltPagDataCadastro.Text = "";
            this.ltPagDataEdicao.Text = "";
            this.ltPagEditadoPor.Text = "";
            this.gvPagamento.DataSource = this.SgiDAOT.getMvtofins(null, null, null, null, null, null, null, null, null, null, null, id, null, null, null);
            this.gvPagamento.DataBind();
        }

        protected void btnPagSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            MvtofinVO mvtofinVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtPagCodigo.Text))
                {
                    mvtofinVO = MvtofinVO.CreateVO();
                    mvtofinVO.cadastro = DateTime.Now;
                    mvtofinVO.cadastradoPor = usuarioVO.user;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    mvtofinVO = this.SgiDAOT.getMvtofin(Int32.Parse(this.txtPagCodigo.Text));
                }

                mvtofinVO.idFilial = Int32.Parse(this.ddlPagFilial.SelectedValue);
                if (this.ddlPagContaCorrente.SelectedValue.Equals("-1"))
                    mvtofinVO.idCtaCor = null;
                else
                    mvtofinVO.idCtaCor = Int32.Parse(this.ddlPagContaCorrente.SelectedValue);
                if (this.ddlPagCaixa.SelectedValue.Equals("-1"))
                    mvtofinVO.idCaixa = null;
                else
                    mvtofinVO.idCaixa = Int32.Parse(this.ddlPagCaixa.SelectedValue);
                TitpagVO titpagVO = this.SgiDAOT.getTitpag(Convert.ToInt32(txtCadIdTitPag.Text));
                if (titpagVO == null && titpagVO.idFornecedor == null && titpagVO.idFornecedor.Equals("-1"))
                    mvtofinVO.idFornecedor = null;
                else
                    mvtofinVO.idFornecedor = titpagVO.idFornecedor;
                if (this.ddlPagFormaPagamento.SelectedValue.Equals("-1"))
                    mvtofinVO.idFormaPgto = null;
                else
                    mvtofinVO.idFormaPgto = Int32.Parse(this.ddlPagFormaPagamento.SelectedValue);
                if (titpagVO == null || titpagVO.idPlnCta == null || titpagVO.idPlnCta.Equals("-1"))
                    mvtofinVO.idPlnCta = null;
                else
                    mvtofinVO.idPlnCta = titpagVO.idPlnCta;
                if (titpagVO == null || titpagVO.idCCusto == null || titpagVO.idCCusto.Equals("-1"))
                    mvtofinVO.idCCusto = null;
                else
                    mvtofinVO.idCCusto = titpagVO.idCCusto;

                mvtofinVO.idTitPag = Int32.Parse(this.txtCadIdTitPag.Text);

                mvtofinVO.dtMvtoFin = DateTime.Parse(this.txtPagDataPagamento.Text);

                mvtofinVO.natureza = 'D';

                mvtofinVO.valor = decimal.Parse(this.txtPagValor.Text.Replace(".", ""));
                mvtofinVO.valorJuro = decimal.Parse(this.txtPagValorJuros.Text.Replace(".", ""));
                mvtofinVO.valorDesc = decimal.Parse(this.txtPagValorDescC.Text.Replace(".", ""));
                mvtofinVO.valorPago = decimal.Parse(this.txtPagValorPago.Text.Replace(".", ""));

                mvtofinVO.edicao = DateTime.Now;
                mvtofinVO.editadoPor = usuarioVO.user;

                this.SgiDAOT.transactionBegin();

                titpagVO.valorJuroC += mvtofinVO.valorJuro;
                titpagVO.valorDescC += mvtofinVO.valorDesc;
                titpagVO.valorPago += mvtofinVO.valorPago;

                decimal resultado = (decimal)((titpagVO.valor + titpagVO.valorJuroC) - (titpagVO.valorPago + titpagVO.valorDescC));

                if (resultado >= 0)
                {

                    DateTime dtAtualizadaPag = Convert.ToDateTime(this.txtPagDataPagamento.Text);
                    if (!String.IsNullOrEmpty(this.txtCadPgto.Text))
                    {
                        DateTime dtUltimoPag = Convert.ToDateTime(this.txtCadPgto.Text);
                        if (dtUltimoPag > dtAtualizadaPag)
                            titpagVO.pgto = dtUltimoPag;
                        else
                            titpagVO.pgto = dtAtualizadaPag;
                    }
                    else
                    {
                        titpagVO.pgto = dtAtualizadaPag;
                    }

                    this.txtCadPgto.Text = titpagVO.pgto.Value.ToString("dd/MM/yyyy");

                    if (!cbPagSituacao.Checked)
                    {
                        titpagVO.situacao = 'A';
                        titpagVO.valorSaldo = resultado;
                        txtCadValorSaldo.Text = Convert.ToString(titpagVO.valorSaldo);
                    }
                    else
                    {
                        titpagVO.situacao = 'F';
                        titpagVO.valorDescC += resultado;
                        titpagVO.valorSaldo = 0;
                        txtCadValorDescC.Text = Convert.ToString(titpagVO.valorDescC);
                        txtCadValorSaldo.Text = "0,00";
                    }

                }
                else
                {
                    Util.ExibeAlert(this, "O valor do saldo não pode ser menor que zero! Altere os valores!");
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    return;
                }



                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    mvtofinVO.idMvtoFin = (int)this.SgiDAOT.newMvtofin(mvtofinVO);
                else
                    this.SgiDAOT.setMvtofin(mvtofinVO);

                this.SgiDAOT.newTitpaghist(logMvtofin(mvtofinVO));

                this.SgiDAOT.setTitpag(titpagVO);

                this.SgiDAOT.transactionCommit();

                atualizaGvParcelamento(titpagVO.idTitPag, (Decimal)titpagVO.valorSaldo);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtPagCodigo.Text = mvtofinVO.idMvtoFin.ToString();
                this.ltPagCadastradoPor.Text = mvtofinVO.cadastradoPor;
                this.ltPagEditadoPor.Text = mvtofinVO.editadoPor;
                this.ltPagDataCadastro.Text = mvtofinVO.cadastro.ToString("dd/MM/yyyy");
                this.ltPagDataEdicao.Text = mvtofinVO.edicao.ToString("dd/MM/yyyy");

                this.gvPagamento.DataSource = this.SgiDAOT.getMvtofins(null, null, null, null, null, null, null, null, null, null, null, mvtofinVO.idTitPag, null, null, null);
                this.gvPagamento.DataBind();

                ImageButton i = new ImageButton();
                i.CommandArgument = Convert.ToString(titpagVO.idTitPag);

                imgbVisualizar_Click(i, null);

                this.tabTitpag.ActiveTabIndex = 2;

                i.CommandArgument = Convert.ToString(mvtofinVO.idMvtoFin);

                imgbPagVisualizar_Click(i, null);
                btnPagCancelar_Click(null, null);



            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }
        }

        protected void btnPagCancelar_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabTitpag.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.pnlPagamento);


            // Detrava botão de novo
            this.btnPagNovo.Enabled = true;

            // Desabilita o botão salvar
            this.btnPagSalvar.Enabled = false;

        }

        protected void btnPagNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.pnlPagamento);
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.pnlPagamento);

            this.txtPagValor.Text = txtCadValor.Text;
            this.txtPagValorJuros.Text = "0,00";
            this.txtPagValorDescC.Text = "0,00";
            this.txtPagValorPago.Text = "0,00";

            this.ltPagCadastradoPor.Text = "";
            this.ltPagEditadoPor.Text = "";
            this.ltPagDataCadastro.Text = "";
            this.ltPagDataEdicao.Text = "";

            // Trava apenas os text box da PK
            this.txtPagCodigo.Enabled = false;

            // Trava botão de novo
            this.btnPagNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnPagSalvar.Enabled = true;

            this.txtPagDataPagamento.Focus();

            TitpagVO tpVO = this.SgiDAOT.getTitpag(Convert.ToInt32(txtCadIdTitPag.Text));

            if (tpVO.idCtaCor != null && tpVO.idCtaCor != -1)
            {
                ddlPagBanco.SelectedValue = Convert.ToString(this.SgiDAOT.getCtacor(tpVO.idCtaCor).idBanco);
                ddlBanco_SelectedIndexChanged(null, null);
                ddlPagContaCorrente.SelectedValue = Convert.ToString(tpVO.idCtaCor);
            }

            if (tpVO.idCaixa != null && tpVO.idCaixa != -1)
                ddlPagCaixa.SelectedValue = Convert.ToString(tpVO.idCaixa);

            if (tpVO.idFormaPgto != null && tpVO.idFormaPgto != -1)
                ddlPagFormaPagamento.SelectedValue = Convert.ToString(tpVO.idFormaPgto);

            if (tpVO.situacao == 'F')
                cbPagSituacao.Checked = true;
            else
                cbPagSituacao.Checked = false;

        }

        protected void imgbPagVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            MvtofinVO mvtofinVO = null;
            int idPagamento = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idPagamento = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                mvtofinVO = this.SgiDAOT.getMvtofin(idPagamento);

                this.txtPagCodigo.Text = mvtofinVO.idMvtoFin.ToString();
                this.ddlPagFilial.SelectedValue = Convert.ToString(mvtofinVO.idFilial);
                filtraFilialDDL(null, null);
                if (mvtofinVO.idCtaCor == null)
                {
                    this.ddlPagBanco.SelectedValue = "-1";
                    atualizarDdlIdCtaCor(null, null);
                    this.ddlPagContaCorrente.SelectedValue = "-1";
                }
                else
                {
                    this.ddlPagBanco.SelectedValue = Convert.ToString(this.SgiDAOT.getCtacor(mvtofinVO.idCtaCor).idBanco);
                    atualizarDdlIdCtaCor(null, null);
                    this.ddlPagContaCorrente.SelectedValue = mvtofinVO.idCtaCor.Value.ToString();
                }
                if (mvtofinVO.idCaixa == null)
                    this.ddlPagCaixa.SelectedValue = "-1";
                else
                    this.ddlPagCaixa.SelectedValue = mvtofinVO.idCaixa.Value.ToString();
                if (mvtofinVO.idFormaPgto == null)
                    this.ddlPagFormaPagamento.SelectedValue = "-1";
                else
                    this.ddlPagFormaPagamento.SelectedValue = mvtofinVO.idFormaPgto.Value.ToString();
                if (mvtofinVO.dtMvtoFin == null)
                    this.txtPagDataPagamento.Text = null;
                else
                    this.txtPagDataPagamento.Text = mvtofinVO.dtMvtoFin.ToString("dd/MM/yyyy");
                this.txtPagValor.Text = String.Format("{0:n2}", mvtofinVO.valor);
                if (mvtofinVO.valorJuro == null)
                    this.txtPagValorJuros.Text = null;
                else
                    this.txtPagValorJuros.Text = String.Format("{0:n2}", mvtofinVO.valorJuro.Value);
                if (mvtofinVO.valorDesc == null)
                    this.txtPagValorDescC.Text = null;
                else
                    this.txtPagValorDescC.Text = String.Format("{0:n2}", mvtofinVO.valorDesc.Value);
                if (mvtofinVO.valorPago == null)
                    this.txtPagValorPago.Text = null;
                else
                    this.txtPagValorPago.Text = String.Format("{0:n2}", mvtofinVO.valorPago.Value);

                this.ltPagCadastradoPor.Text = mvtofinVO.cadastradoPor;
                this.ltPagEditadoPor.Text = mvtofinVO.editadoPor;
                this.ltPagDataCadastro.Text = mvtofinVO.cadastro.ToString("dd/MM/yyyy");
                this.ltPagDataEdicao.Text = mvtofinVO.edicao.ToString("dd/MM/yyyy");

                //Desabilita campos para edição
                Util.HabilitarCampos(false, this.pnlPagamento);

                //Desabilita botão salvar
                this.btnPagSalvar.Enabled = false;

                //Habilita botão novo
                this.btnPagNovo.Enabled = true;

                if (ddlCadSituacao.SelectedValue == "F")
                    cbPagSituacao.Checked = true;
                else
                    cbPagSituacao.Checked = false;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        #endregion

        #region PagamentoXTitipaghist

        protected TitpaghistVO logMvtofin(MvtofinVO alteracao)
        {
            string acao = String.Empty;
            StringBuilder para = new StringBuilder();
            int idTitpag = alteracao.idMvtoFin;

            acao = "Pagamento";
            para.Append("ID => " + alteracao.idMvtoFin);
            para.Append(", ID Titulo => " + alteracao.idTitPag);
            para.Append(", ID Filial => " + alteracao.idFilial);
            para.Append((alteracao.idCtaCor != (int)-1 && alteracao.idCtaCor != null ? ", ID Conta Corrente => " + alteracao.idCtaCor : ""));
            para.Append((alteracao.idCaixa != (int)-1 && alteracao.idCaixa != null ? ", ID Caixa => " + alteracao.idCaixa : ""));
            para.Append((alteracao.idFornecedor != (int)-1 && alteracao.idFornecedor != null ? ", ID Fornecedor => " + alteracao.idFornecedor : ""));
            para.Append((alteracao.idFormaPgto != (int)-1 && alteracao.idFormaPgto != null ? ", ID Forma de Pagamento => " + alteracao.idFormaPgto : ""));
            para.Append((alteracao.idPlnCta != (int)-1 && alteracao.idPlnCta != null ? ", ID Plano de Conta => " + alteracao.idPlnCta : ""));
            para.Append((alteracao.idCCusto != (int)-1 && alteracao.idCCusto != null ? ", ID Centro de Custo => " + alteracao.idCCusto : ""));

            para.Append(", Data Pagamento => " + alteracao.dtMvtoFin);
            para.Append(", Valor Título => " + alteracao.valor);
            para.Append(alteracao.valorJuro != null ? ", Valor de Acrescimo => " + alteracao.valorJuro.Value.ToString() : "");
            para.Append(alteracao.valorDesc != null ? ", Valor de desconto => " + alteracao.valorDesc.Value.ToString() : "");
            para.Append(alteracao.valorPago != null ? ", Valor Pago => " + alteracao.valorPago.Value.ToString() : "");

            para.Append((!cbPagSituacao.Checked ? ", Situação => Aberto" : ", Situação => Fechado"));

            TitpaghistVO thVO = null;

            thVO = TitpaghistVO.CreateVO();

            thVO.titPagAcao = acao;
            thVO.titPagHist = para.ToString();
            thVO.idTitPag = (int)alteracao.idTitPag;

            thVO.cadastradoPor = usuarioVO.user;
            thVO.cadastro = DateTime.Now;
            thVO.editadoPor = usuarioVO.user;
            thVO.edicao = DateTime.Now;

            return thVO;

        }

        #endregion

        #region Parcelamento

        protected void imgbParcelamento_Click(object sender, ImageClickEventArgs e)
        {
            string idTitpagFornecedor = ((ImageButton)sender).CommandArgument;
            string[] idS = idTitpagFornecedor.Split('|');

            int idTitpag = Convert.ToInt32(idS[0].ToString());
            int? idFornecedor = idS[1].ToString() != null && !String.IsNullOrEmpty(idS[1].ToString()) ? Convert.ToInt32(idS[1].ToString()) : 0;
            int idFilial = Convert.ToInt32(idS[2].ToString());
            List<TitpagVO> tpVOLista;
            atualizaValorTotal();
            if (this.txtPagParcelaSaldo.Text == "0,00" || this.txtPagParcelaSaldo.Text == "0" || String.IsNullOrEmpty(this.txtPagParcelaSaldo.Text))
            {
                Session["parcelamentoPagamento"] = null;
                carregaParcelamento(null);
                Session["parcelamentoPagamentoParcela"] = null;
                carregaParcelas(null);
            }

            if (this.Session["parcelamentoPagamento"] == null)
            {
                tpVOLista = new List<TitpagVO>();
                tpVOLista.Add(this.SgiDAOT.getTitpag(idTitpag));
                this.Session["parcelamentoPagamento"] = tpVOLista;

                if (idFornecedor != 0)
                {
                    FornecedorVO foVO = this.SgiDAOT.getFornecedor((int)idFornecedor);
                    this.txtPagParcelaIdFornecedor.Text = foVO.pessoa;
                    this.hfPagParcelaIdFornecedor.Value = Convert.ToString(foVO.idFornecedor);
                }

                FilialVO flVO = this.SgiDAOT.getFilial(idFilial);
                this.txtPagParcelaIdFilial.Text = flVO.filial;
                this.hfPagParcelaIdFilial.Value = Convert.ToString(flVO.idFilial);

                gvPagParcelamento.Enabled = true;

                tabTitpag.ActiveTabIndex = 4;
            }
            else
            {
                tpVOLista = (List<TitpagVO>)this.Session["parcelamentoPagamento"];
                TitpagVO tpVO = tpVOLista.Find(tpVOP => tpVOP.idTitPag == idTitpag);
                if (tpVO == null)
                {
                    if (tpVOLista.Count > 0)
                    {
                        if (hfPagParcelaIdFornecedor.Value == (idFornecedor == 0 ? String.Empty : Convert.ToString(idFornecedor)))
                        {
                            tpVOLista.Add(this.SgiDAOT.getTitpag(idTitpag));

                            gvPagParcelamento.Enabled = true;

                            tabTitpag.ActiveTabIndex = 4;
                        }
                        else
                        {
                            Util.ExibeAlert(this, "Titulo não tem o mesmo fornecedor para fazer o parcelamento!");
                        }
                    }
                    else
                    {
                        tpVOLista.Add(this.SgiDAOT.getTitpag(idTitpag));

                        gvPagParcelamento.Enabled = true;

                        tabTitpag.ActiveTabIndex = 4;
                    }
                }
                else
                {
                    Util.ExibeAlert(this, "Titulo já esta no parcelamento!");
                }
            }
            carregaParcelamento(tpVOLista);


        }

        protected void gvPagParcelamento_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int id = Convert.ToInt32(e.Row.Cells[0].Text.Replace(".", ""));

                TitpagVO tpVO = (TitpagVO)e.Row.DataItem;

                e.Row.Cells[3].Text = String.Format("{0:c}", tpVO.valorSaldo);

                this.saldoPagParcelamento += (decimal)tpVO.valorSaldo;
                if (this.saldoPagParcelamento > 0)
                    txtPagParcelaSaldo.Text = Convert.ToString(this.saldoPagParcelamento);
                else
                    txtPagParcelaSaldo.Text = "0,00";

                if (!String.IsNullOrEmpty(docOri))
                    docOri += ",";
                docOri += e.Row.Cells[0].Text.Replace(".", "");

                txtPagParcelaDocOri.Text = docOri;
            }
        }

        protected void gvPagParcelamentoResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TitpagVO tpVO = (TitpagVO)e.Row.DataItem;
                if (tpVO.idTitPag == idPagParcelamentoParcelaIdTitpag)
                {
                    TitpagVO tpVOU = this.SgiDAOT.getTitpag(idPagParcelamentoParcelaIdTitpag);

                    TextBox txtPagParcelamentoVencimento = (TextBox)e.Row.FindControl("txtPagParcelamentoVencimento");
                    txtPagParcelamentoVencimento.Text = tpVOU.vcto.ToString("dd/MM/yyyy");

                    TextBox txtPagParcelamentoNrDoc = (TextBox)e.Row.FindControl("txtPagParcelamentoNrDoc");
                    txtPagParcelamentoNrDoc.Text = tpVOU.nrDoc;

                    TextBox txtPagParcelamentoValor = (TextBox)e.Row.FindControl("txtPagParcelamentoValor");
                    txtPagParcelamentoValor.Text = Convert.ToString(tpVOU.valor);

                    saldoPagParcelamento += tpVOU.valor;
                }
                else
                {
                    saldoPagParcelamento += tpVO.valor;
                }
                atualizaValorTotal();
            }
        }

        protected void verificaPagParcelamentoAlteracao(int idTitpag, char situacao, Decimal saldo, int? idFornecedor)
        {
            if (gvPagParcelamento.Rows.Count > 0)
            {
                if (gvPagParcelamento.Rows.Count == 1)
                {
                    if (gvPagParcelamento.Rows[0].Cells[0].Text.Replace(".", "") == this.txtCadIdTitPag.Text)
                    {
                        ImageButton imgbParcelamento = new ImageButton();
                        imgbParcelamento.CommandArgument = idTitpag + "|" + idFornecedor + "|" + this.hfPagParcelaIdFilial.Value;
                        this.Session["parcelamentoPagamento"] = null;

                        imgbParcelamento_Click(imgbParcelamento, null);

                        tabTitpag.ActiveTabIndex = 1;
                    }
                }
                else
                {
                    string idFornecedorS = String.Empty;
                    if (idFornecedor != null)
                        idFornecedorS = Convert.ToString(idFornecedor);

                    if (situacao != 'A' || saldo <= 0 || this.hfPagParcelaIdFornecedor.Value != idFornecedorS)
                    {
                        if (gvPagParcelamento.Rows.Count > 0 && gvPagParcelamento.Enabled && Session["parcelamentoPagamento"] != null)
                        {
                            List<TitpagVO> tpVOLista = (List<TitpagVO>)this.Session["parcelamentoPagamento"];
                            TitpagVO tpVO = tpVOLista.Find(tpVOP => tpVOP.idTitPag == idTitpag);

                            if (tpVO != null)
                                tpVOLista.Remove(tpVO);

                            this.Session["parcelamentoPagamento"] = tpVOLista;
                            carregaParcelamento(tpVOLista);
                        }
                    }
                }
            }
        }

        protected void atualizaGvParcelamento(int id, Decimal saldo)
        {
            if (gvPagParcelamento.Rows.Count > 0)
            {
                List<TitpagVO> tpVOLista = (List<TitpagVO>)Session["parcelamentoPagamento"];

                if (tpVOLista.Exists(tpVOP => tpVOP.idTitPag == id))
                {
                    List<TitpagVO> tpVOListaTemp = new List<TitpagVO>();
                    foreach (TitpagVO tpVOItem in tpVOLista)
                    {
                        if (tpVOItem.idTitPag == id)
                        {
                            tpVOItem.valorSaldo = saldo;
                        }
                        tpVOListaTemp.Add(tpVOItem);
                    }

                    Session["parcelamentoPagamento"] = tpVOListaTemp;

                    carregaParcelamento(tpVOListaTemp);
                }
            }
        }

        protected void atualizaForm()
        {
            foreach (string id in this.txtPagParcelaDocOri.Text.Split(','))
            {
                if (id == this.txtCadIdTitPag.Text)
                {
                    ImageButton btnVisualizar = new ImageButton();
                    btnVisualizar.CommandArgument = id;
                    imgbVisualizar_Click(btnVisualizar, null);
                }
            }
        }

        protected void btnPagExcluirParcelamento_click(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(((ImageButton)sender).CommandArgument);

            List<TitpagVO> tpVOLista = (List<TitpagVO>)Session["parcelamentoPagamento"];
            tpVOLista.RemoveAll(tpVOP => tpVOP.idTitPag == id);

            carregaParcelamento(tpVOLista);
        }

        protected void btnPagParcela_click(object sender, EventArgs e)
        {
            if (gvPagParcelamento.Rows.Count > 0)
            {
                if (this.txtPagParcelaSaldo.Text != "0,00" && this.txtPagParcelaSaldo.Text != "0" && !String.IsNullOrEmpty(this.txtPagParcelaSaldo.Text))
                {
                    Decimal saldoTotal = Decimal.Parse(txtPagParcelaSaldo.Text);
                    int qtdParcelas = int.Parse(txtPagParcelaQtd.Text);

                    Decimal valorParcelas = saldoTotal / qtdParcelas;
                    valorParcelas = Math.Round(valorParcelas, 2);

                    TitpagVO tpVO = TitpagVO.CreateVO();
                    tpVO.nrDoc = "Titulos - " + txtPagParcelaDocOri.Text;
                    tpVO.nrDocOri = txtPagParcelaDocOri.Text;
                    tpVO.vcto = Convert.ToDateTime(txtPagParcelaVencimento.Text);
                    if (!String.IsNullOrEmpty(hfPagParcelaIdFornecedor.Value))
                        tpVO.idFornecedor = Convert.ToInt32(hfPagParcelaIdFornecedor.Value);
                    tpVO.idFilial = Convert.ToInt32(hfPagParcelaIdFilial.Value);
                    tpVO.situacao = 'A';
                    tpVO.cadastradoPor = usuarioVO.user;
                    tpVO.cadastro = DateTime.Now;
                    tpVO.editadoPor = usuarioVO.user;
                    tpVO.edicao = DateTime.Now;

                    try
                    {
                        this.SgiDAOT.transactionBegin();

                        List<TitpagVO> tpVOLista = new List<TitpagVO>();

                        for (int i = 0; i < qtdParcelas; i++)
                        {
                            Decimal parcela = valorParcelas;
                            if (i + 1 == qtdParcelas)
                                parcela = saldoTotal;
                            else
                                saldoTotal -= valorParcelas;

                            tpVO.valor = parcela;
                            tpVO.valorDescC = 0;
                            tpVO.valorJuroC = 0;
                            tpVO.valorPago = 0;
                            tpVO.valorSaldo = parcela;

                            tpVO.idTitPag = (int)this.SgiDAOT.newTitpag(tpVO);
                            this.SgiDAOT.newTitpaghist(logTitpag(null, tpVO));

                            TitpagVO tpVOTemp = TitpagVO.CreateVO();
                            tpVOTemp = this.SgiDAOT.getTitpag(tpVO.idTitPag);

                            tpVOLista.Add(tpVOTemp);

                            tpVO.vcto = tpVO.vcto.AddMonths(1);
                        }

                        List<TitpagVO> tpVOListaParcelamento = new List<TitpagVO>();

                        foreach (string idTitpagOriString in tpVO.nrDocOri.Split(','))
                        {
                            int idTitpagOri = Convert.ToInt32(idTitpagOriString);

                            tpVO = this.SgiDAOT.getTitpag(idTitpagOri);
                            tpVO.situacao = 'F';
                            tpVO.valorDescC += tpVO.valorSaldo;
                            tpVO.valorSaldo = 0;
                            tpVO.editadoPor = usuarioVO.user;
                            tpVO.edicao = DateTime.Now;

                            this.SgiDAOT.setTitpag(tpVO);

                            tpVOListaParcelamento.Add(tpVO);

                            this.SgiDAOT.newTitpaghist(logTitpagParcelamento(tpVO, this.txtPagParcelaDocOri.Text, this.txtPagParcelaSaldo.Text, this.txtPagParcelaQtd.Text, this.txtPagParcelaVencimento.Text));
                        }

                        atualizaForm();
                        tabTitpag.ActiveTabIndex = 4;

                        carregaParcelas(tpVOLista);
                        Session["parcelamentoPagamentoParcela"] = tpVOLista;
                        Session["parcelamentoPagamento"] = tpVOListaParcelamento;
                        carregaParcelamento(tpVOListaParcelamento);
                        btnPesquisa_Click(null, null);

                        gvPagParcelamento.Enabled = false;

                        this.txtPagParcelaSaldo.Text = "0,00";
                        this.txtPagParcelaQtd.Text = "1";
                        this.txtPagParcelaVencimento.Text = DateTime.Now.ToShortDateString();

                        this.SgiDAOT.transactionCommit();

                    }
                    catch (Exception ex)
                    {
                        if (this.SgiDAOT != null)
                            this.SgiDAOT.transactionRollBack();
                        Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
                    }
                }
                else
                {
                    Util.ExibeAlert(this, "Titulo não parcelado, saldo total menor ou igual a zero!");
                }
            }
            else
            {
                Util.ExibeAlert(this, "Nenhum título para parcelar");
            }
        }

        protected void btnPagParcelaLimpar_click(object sender, EventArgs e)
        {
            Session["parcelamentoPagamento"] = null;
            Session["parcelamentoPagamentoParcela"] = null;
            carregaParcelamento(null);
            carregaParcelas(null);
        }

        protected void imgbPagParcelasAlterar_Click(object sender, ImageClickEventArgs e)
        {
            if (gvPagParcelamentoResultado.Rows.Count <= 0)
                return;

            try
            {
                this.SgiDAOT.transactionBegin();
                foreach (GridViewRow row in gvPagParcelamentoResultado.Rows)
                {
                    HiddenField hfPagParcelamentoIdTitpag = (HiddenField)row.FindControl("hfPagParcelamentoIdTitpag");

                    int idTitpag = Convert.ToInt32(hfPagParcelamentoIdTitpag.Value);

                    TitpagVO tpVO = this.SgiDAOT.getTitpag(idTitpag);

                    TextBox txtPagParcelamentoNrDoc = (TextBox)row.FindControl("txtPagParcelamentoNrDoc");
                    TextBox txtPagParcelamentoVencimento = (TextBox)row.FindControl("txtPagParcelamentoVencimento");
                    TextBox txtPagParcelamentoValor = (TextBox)row.FindControl("txtPagParcelamentoValor");

                    tpVO.nrDoc = txtPagParcelamentoNrDoc.Text;
                    tpVO.vcto = Convert.ToDateTime(txtPagParcelamentoVencimento.Text);

                    Decimal valor = 0;

                    if (!String.IsNullOrEmpty(txtPagParcelamentoValor.Text))
                        valor = Convert.ToDecimal(txtPagParcelamentoValor.Text);

                    tpVO.valor = valor;
                    tpVO.valorSaldo = valor;

                    txtPagParcelamentoValor.Text = valor == 0 ? "0,00" : Convert.ToString(valor);

                    decimal resultado = (decimal)((tpVO.valor + tpVO.valorJuroC) - (tpVO.valorPago + tpVO.valorDescC));

                    if (resultado >= 0)
                    {
                        TitpagVO tpVOOriginal = this.SgiDAOT.getTitpag(idTitpag);
                        this.SgiDAOT.setTitpag(tpVO);

                        TitpaghistVO tphVO = logTitpag(tpVOOriginal, tpVO);
                        if(tphVO != null)
                            this.SgiDAOT.newTitpaghist(tphVO);

                        if (tpVO.idTitPag == (!String.IsNullOrEmpty(this.txtCadIdTitPag.Text) ? Convert.ToInt32(this.txtCadIdTitPag.Text) : -1))
                        {
                            ImageButton imgbVisualizar = new ImageButton();
                            imgbVisualizar.CommandArgument = Convert.ToString(tpVO.idTitPag);
                            imgbVisualizar_Click(imgbVisualizar, null);

                            tabTitpag.ActiveTabIndex = 4;
                        }

                        saldoPagParcelamento += (Decimal) tpVO.valorSaldo;
                    }
                    else
                    {
                        Label lblPagParcelamentoNumParcelar = (Label) row.FindControl("lblPagParcelamentoNumParcelar");
                        Util.ExibeAlert(this, "O valor do saldo não pode ser menor que zero! Altere o valor da parcela " + lblPagParcelamentoNumParcelar.Text + "ª !");
                        break;
                        return;
                    }

                }
                atualizaValorTotal();
                Util.ExibeAlert(this, "Registro salvo com sucesso!");
                this.SgiDAOT.transactionCommit();
            }
            catch (Exception ex)
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.transactionRollBack();
                Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex.Message);
            }
            
        }

        protected void atualizaValorTotal()
        {
            lblPagParcelamentoValorTotal.Text = "Valor Total: " + saldoPagParcelamento;
        }

        #endregion

        #region ParcelamentoXTitpaghist

        protected TitpaghistVO logTitpagParcelamento(TitpagVO titpagVO, string tituloOriginarioS, string valorTotal, string qtdParcelas, string dataPrimeiroPag)
        {
            string acao = String.Empty;
            StringBuilder para = new StringBuilder();

            acao = "Parcelamento";
            para.Append("ID => " + titpagVO.idTitPag);
            para.Append(", ID Titulo(s) Originario => " + tituloOriginarioS);
            para.Append(", ID Filial => " + titpagVO.idFilial);
            para.Append((titpagVO.idFornecedor != (int)-1 && titpagVO.idFornecedor != null ? ", ID Fornecedor => " + titpagVO.idFornecedor : ""));

            para.Append(", Valor Título Parcelamento => " + valorTotal);
            para.Append(", Quantidade de Parcelas => " + qtdParcelas);
            para.Append(", Data do Primeiro Pagamento => " + dataPrimeiroPag);
            para.Append(", Desconto Atual do Título => " + titpagVO.valorDescC);
            para.Append(", Saldo Atual do Título => 0,00");

            TitpaghistVO thVO = null;

            thVO = TitpaghistVO.CreateVO();

            thVO.titPagAcao = acao;
            thVO.titPagHist = para.ToString();
            thVO.idTitPag = (int)titpagVO.idTitPag;

            thVO.cadastradoPor = usuarioVO.user;
            thVO.cadastro = DateTime.Now;
            thVO.editadoPor = usuarioVO.user;
            thVO.edicao = DateTime.Now;


            return thVO;

        }

        #endregion

    }
}
